package co.edu.uniandes.mundo;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.Naming;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRootPane;
import javax.swing.JTextField;

import co.edu.uniandes.dto.Usuario;
import co.edu.uniandes.services.IServicioUsuario;

/**
 * 
 * @author Rafael Guillermo Blanco Banquez <rafaelg.blancob@gmail.com>
 *
 */
public class InicioSesionGUI extends JFrame{
	
	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = 1L;

	private JButton botonLogear;
	private JLabel labelUsuario,labelClave,labelTitulo;
	private JTextField txtUsuario;
	private JPasswordField txtClave;
	
	//Prueba
	private IServicioUsuario servicioUsuario;
	/**
	 * Constructor
	 */
	public InicioSesionGUI() {
		
		/*
		 * Iniciamos el proceso de adicion de los componente
		 */
		setTitle("Inicio de Sesion");
		setLayout(new BorderLayout());
		//Panel Principal
		//Panel donde se adicionan los demas Comonente del Inicio de Sesion
		JPanel panelPrincipal = new JPanel();
		
		botonLogear = new JButton("Ingresar");
		
		labelTitulo = new JLabel("INGRESE DATOS DE INICIO");
		labelUsuario = new JLabel("Usuario:");
		labelClave = new JLabel("Contraseña:");
		
		txtClave = new JPasswordField("Hosmy007",15);
		txtUsuario = new JTextField("hosmy007",15);
		
		JPanel tmp = new JPanel(new GridLayout(2,2));
		tmp.add(labelUsuario);
		tmp.add(txtUsuario);
		tmp.add(labelClave);
		tmp.add(txtClave);

		panelPrincipal.add(labelTitulo);
		panelPrincipal.add(tmp);		
		panelPrincipal.add(botonLogear);
		
		//Aqui adicionamos el Evento del Boton
		botonLogear.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				//Ejecutamos el Metodo de Logueo
				loguear();
				
			}
		});
		
		
		
		/*
		 * Finalizalos el proceso de adiciono de los componentes
		 */
		setUndecorated(true);  
	    getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
	    getContentPane().add(panelPrincipal, BorderLayout.CENTER); 
		//El JFrame no se puede 
		//setResizable(false);
		//Tamanio del Jframe
		setSize(400, 200);
		//centra el Jframe
		setLocationRelativeTo(null);
		//Activamos el evento de cerrar
		setDefaultCloseOperation(this.EXIT_ON_CLOSE);
		//Mostramos el JFrame
		setVisible(true);
		
		//REALIZAMOS LA CONEXION CON RMI
		try {
			servicioUsuario = (IServicioUsuario)Naming.lookup(IServicioUsuario.NAME_RMI_INVOKE);
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this, "Error RMI: "+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
		}
	}
	
	/**
	 * Metodo que se encarga de verifica si el usuario 
	 * con clave existen en la Base de datos
	 */
	public void loguear(){
		
		try {
			
			Usuario usuario = new Usuario();
			usuario.setTipoAdmin(1);
			usuario.setLogin(txtUsuario.getText());
			usuario.setPassword(String.valueOf(txtClave.getPassword()));
			
			//Aqui realizamos el Proceso de Login
			Usuario usuario2 = servicioUsuario.autenticar(usuario);
			boolean usuarioLogueado = usuario2 != null;
			
			//Si el usuario fue logueado correctamente  
			if(usuarioLogueado){
				
				
				//Mostramos un Mensaje de Bienbenida al Usuario Logueado 	
				JOptionPane.showMessageDialog(this,"Usuario Logueado correctamente. Presione Aceptar para continuar","Mensaje",JOptionPane.INFORMATION_MESSAGE);
				//Cerramos esta pantalla de Inicio de Sesion
				setVisible(false);
				//Mostramos la Pantalla de Sesion Logueado
				PrincipalGUI principal = new PrincipalGUI();
				principal.setExtendedState(JFrame.MAXIMIZED_BOTH);
				principal.setVisible(true);
				
			}else{
				//Si el nombre de usuario y clave no son validos
				JOptionPane.showMessageDialog(this,"Usuario y clave invalido","Mensaje",JOptionPane.ERROR_MESSAGE);
			}
			
			
			
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this,"Se presento un error al loguear:" + e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
		}
	}
	
	/**
	 * Metodo Main principal de la Aplicacion TarvelSof Swing
	 * Solo existira un metodo Main en todo la Aplicacion
	 * @param args
	 */
	public static void main(String[] args) {
		new InicioSesionGUI();
	}
	
}
